/**
 * 表格工具类（基于bootstrapTable）
 */

/**
 * 一级全局变量命名空间
 */
var $g;
if(!$g)$g = new Object();

/**
 * 表格全局变量命名空间
 */
$g.table = new Object();

/**
 * 表格通用选项
 */
$g.table.options = {
	sortName: 'id',
    sortOrder: 'desc',
    sortStable: false,
    queryParamsType: 'pageNumber',
    pagination: true,
    sidePagination:'server',
    paginationLoop: false,
    pageNumber: 1,
    pageSize: 10,
    pageList: [10, 15, 20, 50, "all"],
    search: true,
    searchField: 'title',
    showRefresh: true,
    showToggle: true,
    showColumns: true,
    toolbar: "#tableToolbar",
    clickToSelect: true,    
    showExport: true,
    exportTypes: ["txt", "doc", "excel"],
    exportDataType: "all",
    exportOptions: {
        fileName: "表格数据",
    },
    contextMenu: '#tableContextMenu'
}

/**
 * 创建表格
 * @param table 表格对象
 * @param options 自定义选项
 */
$g.table.create = function(table, options){

	//快捷菜单响应绑定
	options.onContextMenuItem = function(row, $el){
		if(table.actions)
			table.actions($el.data("item"), row);
	}
	
    var o = $.extend(this.options, options);
	//工具栏按钮组
	$('' + o.toolbar + ' .btn').each(function(index, ele){
		$(ele).click(function(){
			if(table.actions)
				table.actions($(this).data('action'));
		});
	});
	
	return $(table.id).bootstrapTable(o);
}

/**
 * 刷新表格
 * @param table 表格对象或表格ID（ID前须包含'#'）
 * @param param 动态参数
 */
$g.table.reload = function(table, param){
	var id = (typeof table == 'object')?table.id:table;
	if(param){
		var options = $(id).bootstrapTable('getOptions');
		options.pageNumber = 1;
		options.queryParams = $.extend({}, param);
	}
    $(id).bootstrapTable('refresh');
}

/**
 * 检查表格操作前置条件
 * table: 表格对象或表格ID（ID前须包含'#'）
 * multi：是否可多选， 默认false
 */
$g.table.precondition = function(table, multi){
	var id = (typeof table == 'object')?table.id:table;
	var objs = $(id).bootstrapTable('getSelections');
    if (objs.length == 0) {
        if(multi)alertify.warning("请至少选择一项进行操作！");
        else alertify.warning("请选择一项进行操作！");
        return null;
    } 
    if (objs.length >= 2 && !multi) {
        alertify.warning("多项被选中，只能选择一项进行操作！");
        return null;
    }
    return (multi)?objs:objs[0];
}

/**
 * 获取选中多行的IDs
 * @param rows 选中行
 */
$g.table.getIds = function(rows){
	var ids = '';
	for(var i=0; i<rows.length; i++){
		ids += ',' + rows[i].id;
	}
	return ids.substring(1);
}
